在你看過的許多教學、文章或甚至是公司的舊專案中,你可能會看到兩種啟動 Docker Compose 的指令:一個是帶有連字號的 docker-compose
,另一個則是作為 docker
主命令一部分的 docker compose
。
它們看起來只是差了一個連字號,但背後卻代表著 Docker Compose 的一次重要演進。這兩者有什麼不同?我應該使用哪一個?今天,我們就來徹底解開這個謎團。
docker-compose
(V1)早期,docker-compose
是一個獨立的工具,使用 Python 編寫。它作為 Docker 生態系的一個輔助專案存在,因此你需要透過 pip
或其他包管理器單獨安裝它。
它的特點是:
獨立執行檔:它是一個名為 docker-compose
的獨立二進制檔案或腳本。
連字號語法:所有指令都圍繞著 docker-compose
這個主命令,例如 docker-compose up
、docker-compose down
、docker-compose ps
。
停止維護:截至 2023 年 7 月,Docker 官方已正式宣佈停止對 docker-compose
V1 的支援與更新。這意味著它將不再獲得新功能或安全性修補程式。
這就是你在許多舊資料中看到的版本,它功不可沒,但已是過去式。
docker compose
(V2)隨著 Docker 功能的整合與發展,社群和官方都希望提供一個更無縫、更一致的使用體驗。因此,Docker Compose 的功能被直接整合進了主要的 Docker CLI 中,這就是 V2 版本的由來。
docker compose
V2 使用 Go 語言重寫,並作為 Docker CLI 的一個子命令 (plugin) 發布。
它的特點是:
CLI 整合:它不再是獨立工具,而是 docker
主命令的一部分。只要你安裝了較新版本的 Docker Desktop 或 Docker Engine,它就已經內建其中,無需額外安裝。
空格語法:指令格式變為 docker compose ...
,例如 docker compose up
、docker compose down
。這種風格與 docker container ls
、docker image prune
等其他 Docker 指令保持了高度一致性。
更快的效能:由於使用 Go 語言重寫,V2 在解析 YAML 檔案和管理容器生命週期方面通常比 V1 更快。
新功能與持續支援:所有新功能,例如 profiles
的改進、--wait
參數等,都只會在 V2 中出現。它是官方持續維護和發展的版本。
功能 | docker-compose (V1) |
docker compose (V2) |
備註 |
---|---|---|---|
安裝方式 | 需額外安裝 (e.g., pip ) |
隨 Docker Engine/Desktop 內建 | V2 更方便 |
主要指令 | docker-compose |
docker compose |
注意連字號與空格的區別 |
啟動服務 | docker-compose up -d |
docker compose up -d |
主要參數大多相容 |
關閉服務 | docker-compose down |
docker compose down |
主要參數大多相容 |
查看日誌 | docker-compose logs -f |
docker compose logs -f |
主要參數大多相容 |
建置映像 | docker-compose build |
docker compose build |
主要參數大多相容 |
專案名稱 | 預設使用目錄名稱,可用 -p 指定 |
同左,但 COMPOSE_PROJECT_NAME 環境變數更好用 |
V2 的整合度更高 |
支援狀態 | 已停止支援 | 官方推薦,持續更新 | 這是最重要的差異! |
答案非常明確:現在就開始全面使用 docker compose
(V2)!
理由如下:
官方趨勢:V1 已經 EOL (End-of-Life),繼續使用意味著你將錯過重要的功能更新和安全修補。
體驗一致性:docker compose
的語法與所有其他 docker
指令統一,降低了記憶負擔,讓你的工作流程更順暢。
無需額外安裝:簡化了環境設定的複雜度,特別是在建置 CI/CD pipeline 或設定新開發機時。
未來的新功能:所有酷炫的新功能都將只出現在 V2 中。
如果你還在舊專案中習慣性地敲著 docker-compose
,現在是時候改過來了。雖然目前大部分常用指令在新舊版本間仍然相容,但儘早擁抱 V2,才能確保你的技能與 Docker 生態系的發展保持同步。
docker-compose
(V1) 是過去的功臣,而 docker compose
(V2) 則是現在與未來的標準。從今天起,讓我們養成使用 docker compose
的好習慣,享受 Docker 帶來的一致性、高效能與持續創新的紅利。